package br.edu.ufcg.dsc.lp2.projeto.tests.model;

import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.Assert;

import br.edu.ufcg.dsc.lp2.projeto.controller.GerenciadorArquivo;
import br.edu.ufcg.dsc.lp2.projeto.model.Estabelecimento;
import br.edu.ufcg.dsc.lp2.projeto.model.Usuario;

public class GerenciadorArquivoTest {
	
	@Before
	public void setUp() {
		
		linhasEstabelecimento.add("Nome;Endereço;Tipo de almoço (self service, prato feito, a la carte)");
		linhasEstabelecimento.add("Bar do Cuscuz e Restaurante;Rua Dr Severino Cruz, 771, Centro;A la carte");
		linhasEstabelecimento.add("Baixinho Bar e Restaurante;Rua papa João XXIII, 101, Liberdade;A la carte");
		linhasEstabelecimento.add("Bar do George;Rua Almirante Barroso, Liberdade;A la carte");
		linhasEstabelecimento.add("Bar do Santos;Rua Silva Barbosa, em frente a Fofex (proximo a UFCG) ;Prato feito");
		linhasEstabelecimento.add("Bodão Bar e Restaurante; Rua Otávio Amorim, 15, Cruzeiro;A la carte");
		linhasEstabelecimento.add("Bonaparte;Shopping Boulevard;A la carte");
		linhasEstabelecimento.add("Bongustaio;Shopping Boulevard;Prato feito");
		linhasEstabelecimento.add("Cabana do Possidônio;Shopping Boulevard;Self-service");
		linhasEstabelecimento.add("Cantina da Sayonara;Campus da UFCG, praça do bloco BD;Prato feito");
		linhasEstabelecimento.add("Cantina de Dona Inês;Campus da UFCG, bloco CN;Prato feito");
		linhasEstabelecimento.add("Cantina de Olavo;Campus da UFCG, ao lado da xerox de Genilda;A la carte");
		
		linhasOpinioes.add("Indicação de data e hora;Seu nome;Bar do Cuscuz e Restaurante;Baixinho Bar e Restaurante;Bar do George;Bar do Santos;Bodão Bar e Restaurante;Bonaparte;Bongustaio;Cabana do Possidônio;Cantina da Sayonara;Cantina de Dona Inês;Cantina de Olavo");
		linhasOpinioes.add("13/5/2011 18:35;Bella;4: Muito bom;2 : É bonzinho;0 : Não conheço;0 : Não conheço;5: Incrível, sensacional, impressionante;1 : Não é ruim;1 : Não é ruim;1 : Não é ruim;-1: Acho um pouco ruim;2 : É bonzinho;-4: Acho muito ruim");
		linhasOpinioes.add("13/5/2011 18:46;Michell;3: Bastante bom;0 : Não conheço;0 : Não conheço;0 : Não conheço;0 : Não conheço;0 : Não conheço;0 : Não conheço;0 : Não conheço;2 : É bonzinho;3: Bastante bom;2 : É bonzinho");
		linhasOpinioes.add("10/5/2011 16:43;Monica;4: Muito bom;2 : É bonzinho;0 : Não conheço;0 : Não conheço;5: Incrível, sensacional, impressionante;1 : Não é ruim;1 : Não é ruim;1 : Não é ruim;-1: Acho um pouco ruim;2 : É bonzinho;-4: Acho muito ruim");
	
		
		
		
	}

	@Test
	public void testSeparaEstabelecimento() {
		List<Estabelecimento> estabelecimentos =
			GerenciadorArquivo.separaEstabelecimentos(linhasEstabelecimento);

		Assert.assertEquals(11, estabelecimentos.size());
		Assert.assertEquals("Bar do Cuscuz e Restaurante", estabelecimentos.get(0).getNome());
		Assert.assertEquals("Rua Dr Severino Cruz, 771, Centro", estabelecimentos.get(0).getEndereco());
		Assert.assertEquals("A la carte", estabelecimentos.get(0).getTipoDeAlmoco());
		
		Assert.assertEquals("Cantina de Olavo", estabelecimentos.get(10).getNome());
		Assert.assertEquals("Campus da UFCG, ao lado da xerox de Genilda", estabelecimentos.get(10).getEndereco());
		Assert.assertEquals("A la carte", estabelecimentos.get(10).getTipoDeAlmoco());
	}

	@Test
	public void testSeparaUsuario() {
		List<Estabelecimento> estabelecimentos = GerenciadorArquivo.separaEstabelecimentos(linhasEstabelecimento);
		
		List<Usuario> usuarios = 
			GerenciadorArquivo.separaUsuarios(linhasOpinioes, estabelecimentos);
		
		Estabelecimento barDoCuscuz = estabelecimentos.get(0);
		
		Assert.assertEquals(3, usuarios.size());
		Assert.assertEquals("Bella", usuarios.get(0).getNome());
		Assert.assertEquals(4, usuarios.get(0).getNota(barDoCuscuz));
		
		Assert.assertEquals("Monica", usuarios.get(2).getNome());
		Assert.assertEquals(4, usuarios.get(2).getNota(barDoCuscuz));
	}
	
	private final List<String> linhasOpinioes = new ArrayList<String>();
	private final List<String> linhasEstabelecimento = new ArrayList<String>();
	
}
